package cron

import (
	"fmt"
	l4g "github.com/alecthomas/log4go"
	"os"
	"sort"
	"strings"
)

type ByModTime []os.FileInfo

func (fis ByModTime) Len() int {
	return len(fis)
}
func (fis ByModTime) Swap(i, j int) {
	fis[i], fis[j] = fis[j], fis[i]
}
func (fis ByModTime) Less(i, j int) bool {
	return fis[i].ModTime().Before(fis[j].ModTime())
}

//排序从最新 到 最 晚的 方法
func SortFile(path, name string) (files ByModTime) {
	f, err := os.Open(path)
	if err != nil {
		fmt.Println(err)
	}
	fis, err := f.Readdir(-1)
	if err != nil {
		fmt.Println(err)
	}
	defer f.Close()
	files = make(ByModTime, len(fis)+10)
	j := 0
	for i, v := range fis {
		if strings.Contains(fis[i].Name(), name) {
			files[j] = v
			j++
		}
	}
	files = files[:j]
	sort.Sort(ByModTime(files))
	return files
}

func RmByModTime(path string,historyNumber int,files ByModTime){
	if len(files) > historyNumber {
		for k, _ := range files[historyNumber:] {
			rmname := path + files[k].Name()
			l4g.Warn("正在删除 文件 %s", rmname)
			err := os.RemoveAll(rmname)
			if err != nil {
				l4g.Error("正在删除 文件 错误 详细 %s", err)
			} else {
				l4g.Warn("删除成功 %s", rmname)
			}
		}
	}
}

func RmHistory(path string,historyNumber int, Prefix string)  {
	files := SortFile(path, Prefix)
	RmByModTime(path,historyNumber,files)
}

func DealWithFiles(path, timestamp string, Prefix string) (filename string) {
	filename = path + Prefix + timestamp
	 err := os.Mkdir(filename,os.ModePerm)
	if err != nil {
		l4g.Error("文件 创建 错误 详细 %s",err)
	}
	return filename
}

